package com.lpf;

import net.bytebuddy.implementation.bind.annotation.*;

import java.lang.reflect.Method;

public class Interceptor03 {

    /**
     * @param obj          目标对象
     * @param allArguments 注入目标方法的全部参数
     * @param method       目标方法
     * @param db           目标对象
     * @param callable     通过@Morph注解注入
     */
    @RuntimeType
    public Object intercept(@This Object obj,
                            @AllArguments Object[] allArguments,
                            @Origin Method method,
                            @Super DB db,
                            @Morph OverrideCallable callable) {
        try {
            System.out.println("before");
            // 通过 OverrideCallable.call()方法调用目标方法，此时需要传递参数
            Object result = callable.call(allArguments);
            System.out.println("after");
            return result;
        } finally {
            System.out.println("finally");
        }
    }
}
